package com.solo.system.web;

import cn.dev33.satoken.annotation.SaCheckPermission;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryWrapper;
import com.solo.common.core.global.R;
import com.solo.common.logger.annotation.Logger;
import com.solo.common.logger.enums.LoggerType;
import com.solo.common.orm.core.query.Wrappers;
import com.solo.system.model.i18n.data.SysI18nDataConvert;
import com.solo.system.model.i18n.data.req.I18nDataCreateReq;
import com.solo.system.model.i18n.data.req.I18nDataQueryReq;
import com.solo.system.model.i18n.data.req.I18nDataUpdateReq;
import com.solo.system.model.i18n.data.resp.I18nDataGetResp;
import com.solo.system.model.i18n.data.resp.I18nDataListResp;
import com.solo.system.service.SysI18nDataService;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 国际化语言数据控制器
 * @author 十一
 * @since 2024-10-24 13:46
 * 人生若只如初见，何事秋风悲画扇
 **/
@RestController
@AllArgsConstructor
@RequestMapping("/system/i18n-data")
public class SysI18nDataController {

    private final SysI18nDataService sysI18nDataService;

    /**
     * 新增国际化语言数据
     * @param req 国际化语言数据新增对象
     * @return 响应信息
     */
    @PostMapping
    @SaCheckPermission("system-i18n-data-create")
    @Logger(value = "新增国际化语言数据", type = LoggerType.CREATE)
    public R<Boolean> create(@Valid @RequestBody I18nDataCreateReq req) {
        return R.success(sysI18nDataService.create(req));
    }

    /**
     * 删除国际化语言数据
     * @param dataIds 国际化语言数据集合
     * @return 响应信息
     */
    @DeleteMapping("/{dataIds}")
    @SaCheckPermission("system-i18n-data-delete")
    @Logger(value = "删除国际化语言数据", type = LoggerType.DELETE)
    public R<Boolean> delete(@PathVariable List<Long> dataIds) {
        return R.success(sysI18nDataService.delete(dataIds));
    }

    /**
     * 更新国际化语言数据
     * @param req 国际化语言数据更新对象
     * @return 响应信息
     */
    @PutMapping
    @SaCheckPermission("system-i18n-data-update")
    @Logger(value = "更新国际化语言数据", type = LoggerType.UPDATE)
    public R<Boolean> update(@Valid @RequestBody I18nDataUpdateReq req) {
        return R.success(sysI18nDataService.update(req));
    }

    /**
     * 获取国际化语言数据
     * @param dataId 国际化语言数据
     * @return 响应信息
     */
    @GetMapping("/{dataId}")
    @SaCheckPermission("system-i18n-data-query")
    public R<I18nDataGetResp> get(@PathVariable Long dataId) {
        return R.success(SysI18nDataConvert.INSTANCE.convertGet(sysI18nDataService.getById(dataId)));
    }

    /**
     * 分页查询国际化语言数据列表
     * @param page 分页对象
     * @param req 国际化语言数据查询对象
     * @return 响应信息
     */
    @GetMapping("/page")
    @SaCheckPermission("system-i18n-data-query")
    public R<Page<I18nDataListResp>> page(Page<I18nDataListResp> page, I18nDataQueryReq req) {
        QueryWrapper queryWrapper = Wrappers.builder(req);
        Page<I18nDataListResp> list = sysI18nDataService.pageAs(page, queryWrapper, I18nDataListResp.class);
        return R.success(list);
    }

}
